package conta;

import excecoes.PessoaException;

/**
 * Informa�oes sobre uma pessoa.
 * 
 * @author Adalberto Teixeira
 * @author Andrey Menezes
 * @author Laise Florentino
 * @author Laio Francis
 * 
 */
public class PessoaUserStories{
	private String nome;
	private String email;
	private String telefone;
	private String foto;
	
	/**
	 * Cria uma pessoa.
	 * 
	 * @param nome Nome da pessoa
	 * @param email Email da pessoa
	 * @param telefone Telefone da pessoa
	 * 
	 * @throws PessoaException
	 */
	public PessoaUserStories(String nome, String email, String telefone) throws PessoaException{
		this.nome = nome;
		this.email = email;
		this.telefone = telefone;
		
		setNome(nome);
		setEmail(email);
		if (!telefone.isEmpty())
			setTelefone(telefone);
	}
	
	/**
	 * Retorna o nome.
	 * 
	 * @return nome Nome da pessoa
	 */
	public String getNome(){
		return this.nome;
	}
	
	/**
	 * Retorna o email.
	 * 
	 * @return email Email da pessoa
	 */
	public String getEmail(){
		return this.email;
	}
	
	
	/**
	 * Retorna o telefone.
	 * 
	 * @return telefone Telefone da pessoa
	 */
	public String getTelefone(){
		return this.telefone;
	}
	
	/**
	 * Altera nome da pessoa.
	 * 
	 * @param novoNome
	 * 
	 * @throws PessoaException
	 *               se nulo ou vazio.                        
	 */
	public void setNome(String novoNome) throws PessoaException{
		if (novoNome == null || novoNome.equalsIgnoreCase(""))
			throw new PessoaException("Nome eh um dado obrigatorio.");
		this.nome = novoNome;
	}
	
	/**
	 * Altera email da pessoa.
	 * 
	 * @param novoEmail
	 *            modelo ideal de Email zzz@yyy.xxx
	 * 
	 * @throws PessoaException
	 *                nulo ou vazio. lan�a "E-mail eh um dado obrigatorio."   
	 *                modelo fora do ideal. lan�a "E-mail invalido."                          
	 */
	public void setEmail(String novoEmail) throws PessoaException {
		if (novoEmail == null || novoEmail.equals(""))
			throw new PessoaException("E-mail eh um dado obrigatorio.");
		
		char[] cadeia = novoEmail.toCharArray();
		if (cadeia[0] == '@') //nao existe zzz@
			throw new PessoaException("E-mail invalido.");
		if (cadeia[cadeia.length - 1] == '@') //nao existe .xxx@
			throw new PessoaException("E-mail invalido.");
		int posicaoArroba = 0, posicaoPonto = 0;
		for (int i = 0; i < cadeia.length; i++) {
			if (cadeia[i] == '@' && cadeia[i + 1] == '.') //nao existe @.yy
				throw new PessoaException("E-mail invalido.");
			if (cadeia[i] == '.')
				posicaoPonto = i;
			if (cadeia[i] == '@') //nao existe 2 @ em um email
				if (posicaoArroba == 0)
					posicaoArroba = i;
				else
					throw new PessoaException("E-mail invalido.");
		}
		// nao existe .xxx ou @ eh mais afastado do ponto
		if (posicaoArroba >= posicaoPonto) {
			throw new PessoaException("E-mail invalido.");
		}
		if (posicaoArroba == 0)
			throw new PessoaException("E-mail invalido.");
		this.email = novoEmail;
	}
	
	/**
	 * Altera telefone da pessoa.
	 * 
	 * @param novoTelefone
	 *            se nulo ou com menos de 12 numeros                       
	 */
	public void setTelefone(String novoNumero) throws PessoaException {
		this.telefone = novoNumero;
	}

	public String getFoto() {
		return foto;
	}
	
	public void setFoto(String foto) {
		this.foto = foto;
	}
}